﻿#pragma once
#ifndef WRDATASAVEPROCESS_H
#define WRDATASAVEPROCESS_H

#include "WRGlobal.h"
#include "WRWorkProcess.h"
#include "Structs/WRDataSaveState.h"

//表示数据存储处理。
class WRSOFT_WORKING_COMMON_CLASS WRDataSaveProcess : public WRWorkProcess
{
public:
    //查询指示标识的状态源接口。
    WRStateSource* queryStateSource(const QUuid& uuid);

private:
    //表示状态处理器集合。
    class StateHandlers : public WRStateHandlers<WRDataSaveState>
    {
    public:
        //初始化状态处理器集合。
        inline StateHandlers(void)
        {
            //squelchd code here
        }

        //获取是否启用存储。
        inline bool enabled(void) const
        {
            return m_value.enabled();
        }
        //获取是否正在存储。
        inline bool running(void) const
        {
            return m_value.running();
        }        
        //获取是否可以存储。
        inline bool available(void) const
        {
            return m_value.available();
        }

        //获取文件大小（只有存储中该值才有效）。
        inline WR64s fileSize(void) const
        {
            return m_value.fileSize();
        }
        //获取磁盘剩余。
        inline WR64s diskFree(void) const
        {
            return m_value.diskFree();
        }
    };
    //状态处理器集合。
    StateHandlers m_stateHandlers;

    //禁用复制构造函数和赋值操作符。
    Q_DISABLE_COPY(WRDataSaveProcess)

protected:
    //当状态改变后调用此方法。
    inline void onStateChanged(const WRDataSaveState& value)
    {
        m_stateHandlers.doProcess(value);
    }

    //初始化处理对象。
    WRDataSaveProcess(void);
    //清理当前对象所占用的相关资源。
    ~WRDataSaveProcess(void);

    //获取当前状态值。
    inline void state(WRDataSaveState& value)
    {
        m_stateHandlers.value(value);
    }
    //获取当前状态。
    inline const WRDataSaveState& state(void) const
    {
        return m_stateHandlers.value();
    }

    //获取是否启用存储。
    inline bool enabled(void) const
    {
        return m_stateHandlers.enabled();
    }
    //获取是否正在存储。
    inline bool running(void) const
    {
        return m_stateHandlers.running();
    }
    //获取是否可以存储。
    inline bool available(void) const
    {
        return m_stateHandlers.available();
    }

    //获取文件大小（只有存储中该值才有效）。
    inline WR64s fileSize(void) const
    {
        return m_stateHandlers.fileSize();
    }
    //获取磁盘剩余。
    inline WR64s diskFree(void) const
    {
        return m_stateHandlers.diskFree();
    }

public:
    //获取状态源。
    inline WRStateSource* stateSource(void)
    {
        return &m_stateHandlers;
    }
};

#endif // WRDATASAVEPROCESS_H
